home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import gtk
- import glib
- import gobject
- import pango
- import ibus
- from icon import load_icon
- from gettext import dgettext
-
- _ = lambda a: dgettext('ibus', a)
-
- N_ = lambda a: a
-
- class EngineTreeView(gtk.TreeView):
- __gsignals__ = {
- 'changed': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()) }
-
- def __init__(self, engines):
- super(EngineTreeView, self).__init__()
- self._EngineTreeView__engines = set([])
- self._EngineTreeView__changed = False
- self.set_reorderable(True)
- self._EngineTreeView__model = gtk.ListStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
- self.set_model(self._EngineTreeView__model)
- self._EngineTreeView__model.connect('row-changed', self._EngineTreeView__emit_changed_delay_cb, 'row-changed')
- self._EngineTreeView__model.connect('row-deleted', self._EngineTreeView__emit_changed_delay_cb, 'row-deleted')
- self._EngineTreeView__model.connect('row-inserted', self._EngineTreeView__emit_changed_delay_cb, 'row-inserted')
- self._EngineTreeView__model.connect('rows-reordered', self._EngineTreeView__emit_changed_delay_cb, 'rows-reordered')
- column = gtk.TreeViewColumn(_('Input Method'))
- column.set_min_width(220)
- renderer = gtk.CellRendererPixbuf()
- renderer.set_property('xalign', 0)
- column.pack_start(renderer, False)
- column.set_cell_data_func(renderer, self._EngineTreeView__icon_cell_data_cb)
- renderer = gtk.CellRendererText()
- renderer.set_property('xalign', 0)
- renderer.set_property('ellipsize', pango.ELLIPSIZE_END)
- column.pack_start(renderer, True)
- column.set_cell_data_func(renderer, self._EngineTreeView__name_cell_data_cb)
- self.append_column(column)
- renderer = gtk.CellRendererCombo()
- model = gtk.ListStore(gobject.TYPE_STRING)
- model.append(('us',))
- model.append(('jp',))
- model.append(('xkb',))
- renderer.set_property('xalign', 0)
- renderer.set_property('model', model)
- renderer.set_property('text-column', 0)
- renderer.set_property('has-entry', False)
- renderer.set_property('editable', True)
- renderer.connect('changed', self._EngineTreeView__engine_layout_changed_cb)
- column = gtk.TreeViewColumn(_('Kbd'))
- column.set_expand(False)
- column.set_fixed_width(32)
- column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
- column.pack_start(renderer, False)
- column.set_cell_data_func(renderer, self._EngineTreeView__layout_cell_data_cb)
- self.set_engines(engines)
-
-
- def __emit_changed(self, *args):
- if self._EngineTreeView__changed:
- self._EngineTreeView__changed = False
- self.emit('changed')
-
-
-
- def __emit_changed_delay_cb(self, *args):
- if not self._EngineTreeView__changed:
- self._EngineTreeView__changed = True
- glib.idle_add(self._EngineTreeView__emit_changed)
-
-
-
- def __icon_cell_data_cb(self, celllayout, renderer, model, iter):
- engine = self._EngineTreeView__model.get_value(iter, 0)
- icon_size = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR)[0]
- pixbuf = load_icon(engine.icon, gtk.ICON_SIZE_LARGE_TOOLBAR)
- if pixbuf == None:
- pixbuf = load_icon('engine-default', gtk.ICON_SIZE_LARGE_TOOLBAR)
-
- if pixbuf == None:
- pixbuf = load_icon('gtk-missing-image', gtk.ICON_SIZE_LARGE_TOOLBAR)
-
- renderer.set_property('pixbuf', pixbuf)
-
-
- def __name_cell_data_cb(self, celllayout, renderer, model, iter):
- engine = self._EngineTreeView__model.get_value(iter, 0)
- renderer.set_property('sensitive', True)
- language = ibus.get_language_name(engine.language)
- renderer.set_property('text', '%s - %s' % (language, engine.longname))
- if self._EngineTreeView__model.get_path(iter)[0] == 0:
- renderer.set_property('weight', pango.WEIGHT_BOLD)
- else:
- renderer.set_property('weight', pango.WEIGHT_NORMAL)
-
-
- def __layout_cell_data_cb(self, celllayout, renderer, model, iter):
- engine = self._EngineTreeView__model.get_value(iter, 0)
- layout = self._EngineTreeView__model.get_value(iter, 1)
- renderer.set_property('sensitive', True)
- if not layout:
- layout = engine.layout
-
- renderer.set_property('text', layout)
- if self._EngineTreeView__model.get_path(iter)[0] == 0:
- renderer.set_property('weight', pango.WEIGHT_BOLD)
- else:
- renderer.set_property('weight', pango.WEIGHT_NORMAL)
-
-
- def __engine_layout_changed_cb(self, combo, path, iter):
- return None
- i = self._EngineTreeView__model.get_iter(path)
- layout = combo.get_property('model').get_value(iter, 0)
- self._EngineTreeView__model.set_value(i, 1, layout)
-
-
- def set_engines(self, engines):
- self._EngineTreeView__model.clear()
- self._EngineTreeView__engines = set([])
- for e in engines:
- if e in self._EngineTreeView__engines:
- continue
-
- iter = self._EngineTreeView__model.append(None)
- self._EngineTreeView__model.set(iter, 0, e)
- self._EngineTreeView__engines.add(e)
-
- self._EngineTreeView__emit_changed()
-
-
- def get_selected_iter(self):
- selection = self.get_selection()
- if selection:
- return selection.get_selected()[1]
-
-
- def get_engines(self):
- engines = _[1]
- return engines
-
-
- def get_select_engine(self):
- iter = self.get_selected_iter()
- if iter == None:
- return None
- row = self._EngineTreeView__model.get(iter, 0)
- return row[0]
-
-
- def prepend_engine(self, engine):
- if engine == None or engine in self._EngineTreeView__engines:
- return None
- iter = self._EngineTreeView__model.prepend(None)
- self._EngineTreeView__model.set(iter, 0, engine)
- self._EngineTreeView__engines.add(engine)
- self.scroll_to_cell(self._EngineTreeView__model[0].path, None)
-
-
- def append_engine(self, engine):
- if engine == None or engine in self._EngineTreeView__engines:
- return None
- iter = self._EngineTreeView__model.append(None)
- self._EngineTreeView__model.set(iter, 0, engine)
- self._EngineTreeView__engines.add(engine)
- self.scroll_to_cell(self._EngineTreeView__model[-1].path, None)
-
-
- def remove_engine(self):
- iter = self.get_selected_iter()
- if iter == None:
- return None
- row = self._EngineTreeView__model[iter]
- engine = row[0]
- self._EngineTreeView__engines.remove(engine)
- index = row.path[0]
- self._EngineTreeView__model.remove(iter)
-
- try:
- row = self._EngineTreeView__model[index]
- selection = self.get_selection()
- selection.select_path(row.path)
- except:
- iter == None
-
-
-
- def move_up_engine(self):
- iter = self.get_selected_iter()
- if iter == None:
- return None
- row = self._EngineTreeView__model[iter]
- index = row.path[0]
- if index == 0:
- return None
- self._EngineTreeView__model.swap(iter, self._EngineTreeView__model[index - 1].iter)
- self.scroll_to_cell(row.path, None)
-
-
- def move_down_engine(self):
- iter = self.get_selected_iter()
- if iter == None:
- return None
- row = self._EngineTreeView__model[iter]
- index = row.path[0]
- last_row = self._EngineTreeView__model[-1]
- last_index = last_row.path[0]
- if index == last_index:
- return None
- self._EngineTreeView__model.swap(iter, self._EngineTreeView__model[index + 1].iter)
- self.scroll_to_cell(row.path, None)
-
-
- gobject.type_register(EngineTreeView)
-